package antidestiny.utilib;

/**
 * Created by Hero on 2015/7/28.
 */
public class EncrytUtils {
    private final int key=89;
    public byte[] encrypt(byte[] b){

        for(int i=0;i<b.length;i++){
            b[i]+=key;
        }
        return b;
    }
    public byte[] encrypt(String s){
       return encrypt(s.getBytes());
    }
    public byte[] restore(byte[] b){
        for (int i = 0; i < b.length; i++) {
            b[i]-=key;
        }
        return b;
    }

    /**
     * 把文本加密数字形式
     *
     *
     * @param str
     * @return 返回一个数列，用string储存
     */
    public String encryptIntString(String str){
        byte[] bytes=str.getBytes();
        StringBuilder sb=new StringBuilder();
        for (byte b:bytes){

            sb.append(b>0?'0'+addZero(b,3):'1'+addZero(b,3));

        }
        return sb.toString();

    }

    public String restoreStringFromInt(String string){
       byte[] bytes=new byte[string.length()/4];

        for (int i=0;i<bytes.length;i++){
            bytes[i]=(byte)Integer.valueOf(string.substring(4*i+1,4*i+4)).intValue();
            if (Integer.valueOf(string.substring(4 * i, 4 * i + 1))==1)
            bytes[i]=(byte)(-1*bytes[i]);

        }
        return new String(bytes);
    }

    /**
     * 给字符串形式的数字开头加上0来补足位数，比如 输入（9，3），返回009；
     * @param i 被处理的数
     * @param max 应该具有多少位。
     * @return 永远忽略正负
     */
    private String addZero(int i,int max){
        i=Math.abs(i);
        StringBuilder sb= new StringBuilder();
        for (int j=max-1;j>=0;j--){
            int s=i/(int)Math.pow(10,j);
            sb.append(s);
            i-=s*Math.pow(10,j);
        }
        String s=sb.toString();

        return s;
    }


}
